#ifndef __UsbHotPlug_H__
#define __UsbHotPlug_H__

#include <string>
#include <set>
#include <vector>
#include <mutex>

namespace Media{
using namespace std;
const string FULLDEVPATH = "/dev/video%d";
const string NODEPREFIX = "video";

class UsbHotPlug{
public:
	static void instance();

	/**
	 * 从/dev目录下的所有video设备节点中搜索uvc拉流的设备节点
	 * @return -1表示没有搜索到设备节点，大于等于0代表着搜索到的设备节点编号
	 * */
	static void searchVideo();

	/**
	*	查看设备是不是tail，
	*	@parma in number视频设备节点编号
	*/
	static bool isTail(int number);

	static std::vector<std::string> stringSplit(const std::string& str, char delim);
	
	/**
	 * 设用设备节点的名字获取具体的usb接口名称
	 * @param  device_node_name in: device_node_name:设备节点名称
	 * @return usbname          out: 输出设备节点对应的usb口编号
	 * */
	static bool getUsbName(string device_node_name, string &usbname);
private:
	static void UacInHotPlug();

	static void UacOutHotPlug();

	static bool getDeviceSet(set<string> &curset, bool isCapture);

	static bool compareSet(set<string> setTemp1, set<string> setTemp);

	static bool getSoundNum(string usbport, int &soundnum);

	static int checkUvcVideoId(set<int> &uAddSet);
private:
	static mutex m_infoLock;


};

}
#endif
